package com.how2java.springboot.service;

import com.how2java.springboot.request.ApiResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * 订单接口调用服务（基于 RestTemplate）
 */
@Slf4j
@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${order.api.url}")
    private String apiUrl;

    /**
     * 调用外部订单查询接口
     * @param startTime 开始时间（格式：yyyy-MM-dd HH:mm:ss）
     * @param endTime 结束时间（格式：yyyy-MM-dd HH:mm:ss）
     * @param shopSite 店铺平台（如：拼多多）
     * @param pageNumber 页码
     * @param pageSize 每页条数
     * @return 接口响应实体
     */
    public ApiResponse queryOrders(String startTime, String endTime, String shopSite,
                                   Integer pageNumber, Integer pageSize) {
        log.debug("调用订单接口：{}，参数：startTime={}, endTime={}, page={}, pageSize={}",
                apiUrl, startTime, endTime, pageNumber, pageSize);

        try {
            // 1. 构建请求头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.set("Accept", "*/*");
            headers.set("User-Agent", "OrderSyncService/1.0");

            // 2. 构建请求体参数
            Map<String, Object> requestBody = new HashMap<>();
            requestBody.put("orderModifiedStartTime", startTime);
            requestBody.put("orderModifiedEndTime", endTime);
            requestBody.put("shopSite", shopSite);
            requestBody.put("pageSize", pageSize);
            requestBody.put("pageNumber", pageNumber);

            // 3. 封装请求实体（头+体）
            HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);

            // 4. 发送 POST 请求并接收响应
            ResponseEntity<ApiResponse> responseEntity = restTemplate.postForEntity(
                    apiUrl,       // 请求地址
                    requestEntity, // 请求实体
                    ApiResponse.class // 响应类型
            );

            // 5. 处理响应结果
            if (responseEntity.getStatusCode().is2xxSuccessful()) {
                ApiResponse apiResponse = responseEntity.getBody();
                log.debug("订单接口返回成功：code={}, 总条数={}",
                        apiResponse != null ? apiResponse.getCode() : "null",
                        apiResponse != null ? apiResponse.getTotal() : "null");
                return apiResponse;
            } else {
                log.error("订单接口调用失败，状态码：{}", responseEntity.getStatusCodeValue());
            }

        } catch (Exception e) {
            log.error("订单接口调用异常", e);
        }

        return null;
    }
}